﻿using Common.Helpers;
using MasterEntities.Abstraction;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MasterEntities
{
    public class FizickoLice : Osoba, IDomainObject
    {
        public string Ime { get; set; }
        public string Prezime { get; set; }
        public DateTime? DatumRodjenja { get; set; }
        public string Pol { get; set; }
        public long MajkaId { get; set; }
        public FizickoLice Majka { get; set; }
        public long OtacId { get; set; }
        public FizickoLice Otac { get; set; }

        public FizickoLice() { }

        public FizickoLice(string Ime, string Prezime, DateTime? DatumRodjenja, string Pol, long MajkaId, long OtacId, long Id, string Naziv, DateTime? VremeKreiranja, bool? Rezident, string IdentifikacioniBroj, string Jezik, long IdentifikacioniDokumentId, byte[] Slika, IdentifikacioniDokument IdentifikacioniDokument)
            : base(Id, Naziv, VremeKreiranja, Rezident, IdentifikacioniBroj, Jezik, IdentifikacioniDokumentId, Slika, IdentifikacioniDokument)
        {
            this.Ime = Ime;
            this.Prezime = Prezime;
            this.DatumRodjenja = DatumRodjenja;
            this.Pol = Pol;
            this.MajkaId = MajkaId;
            this.OtacId = OtacId;
        }

        public FizickoLice(string Ime, string Prezime, DateTime? DatumRodjenja, string Pol, long MajkaId, FizickoLice Majka, long OtacId, FizickoLice Otac, long Id, string Naziv, DateTime? VremeKreiranja, bool? Rezident, string IdentifikacioniBroj, string Jezik, long IdentifikacioniDokumentId, byte[] Slika, IdentifikacioniDokument IdentifikacioniDokument)
            : base(Id, Naziv, VremeKreiranja, Rezident, IdentifikacioniBroj, Jezik, IdentifikacioniDokumentId, Slika, IdentifikacioniDokument)
        {
            this.Ime = Ime;
            this.Prezime = Prezime;
            this.DatumRodjenja = DatumRodjenja;
            this.Pol = Pol;
            this.MajkaId = MajkaId;
            this.Majka = Majka;
            this.OtacId = OtacId;
            this.Otac = Otac;
        }

        public FizickoLice(string Ime, string Prezime, DateTime? DatumRodjenja, string Pol, long MajkaId, long OtacId, long Id, string Naziv, DateTime? VremeKreiranja, bool? Rezident, string IdentifikacioniBroj, string Jezik, long IdentifikacioniDokumentId, byte[] Slika)
            : base(Id, Naziv, VremeKreiranja, Rezident, IdentifikacioniBroj, Jezik, IdentifikacioniDokumentId, Slika)
        {
            this.Ime = Ime;
            this.Prezime = Prezime;
            this.DatumRodjenja = DatumRodjenja;
            this.Pol = Pol;
            this.MajkaId = MajkaId;
            this.OtacId = OtacId;
        }

        public new string BaseClassName()
        {
            return this.GetType().BaseType.Name;
        }

        public new string PrimaryKey()
        {
            return base.PrimaryKey();
        }

        public new string GetTableName()
        {
            return this.GetType().Name;
        }

        public new string InsertColumns()
        {
            string insertColumns = string.Empty;
            if (GlobalVariables.Instance.dbConnection == Common.Helpers.Enums.DatabaseConnection.MasterApp1)
                insertColumns = "(Id, Ime, Prezime, DatumRodjenja, Pol, OtacId, MajkaId)";
            else if (GlobalVariables.Instance.dbConnection == Common.Helpers.Enums.DatabaseConnection.MasterApp2)
                insertColumns = "(Id, Naziv, VremeKreiranja, Rezident, IdentifikacioniBroj, Jezik, Ime, Prezime, DatumRodjenja, Pol, OtacId, MajkaId, Slika, IdentifikacioniDokumentId)";

            return insertColumns;
        }

        public new string ColumnsToUpdate()
        {
            string colToUpdate = string.Empty;
            if (GlobalVariables.Instance.dbConnection == Common.Helpers.Enums.DatabaseConnection.MasterApp1)
                colToUpdate = "Ime = '" + Ime + "', Prezime = '" + Prezime + "', DatumRodjenja = " + (DatumRodjenja == null ? "NULL" : "'" + Convert.ToDateTime(DatumRodjenja) + "'") + ", Pol = " + (Pol == null ? "NULL" : "'" + Pol + "'") + ", OtacId=" + (OtacId == 0 ? "NULL" : OtacId.ToString()) + ", MajkaId = " + (MajkaId == 0 ? "NULL" : MajkaId.ToString());
            else if (GlobalVariables.Instance.dbConnection == Common.Helpers.Enums.DatabaseConnection.MasterApp2)
                colToUpdate = "Naziv = '" + Naziv + "' , Rezident = " + (Rezident == null ? "NULL" : (bool)Rezident == true ? "1" : "0") + " , IdentifikacioniBroj = '" + IdentifikacioniBroj + "' , Jezik = '" + Jezik + "',Ime = '" + Ime + "', Prezime = '" + Prezime + "', DatumRodjenja = " + (DatumRodjenja == null ? "NULL" : "'" + Convert.ToDateTime(DatumRodjenja) + "'") + ", Pol = " + (Pol == null ? "NULL" : "'" + Pol + "'") + ", OtacId=" + (OtacId == 0 ? "NULL" : OtacId.ToString()) + ", MajkaId = " + (MajkaId == 0 ? "NULL" : MajkaId.ToString()) + ", Slika = @Slika";

            return colToUpdate;
        }


        public new string InsertValues()
        {
            string insetValues = string.Empty;
            if (GlobalVariables.Instance.dbConnection == Common.Helpers.Enums.DatabaseConnection.MasterApp1)
                insetValues = "( " + Id.ToString() + " , '" + Ime + "','" + Prezime + "', " + (DatumRodjenja == null ? "NULL" : "'" + Convert.ToDateTime(DatumRodjenja) + "'") + "," + (Pol == null ? "NULL" : "'" + Pol + "'") + "," + (OtacId == 0 ? "NULL" : OtacId.ToString()) + "," + (MajkaId == 0 ? "NULL" : MajkaId.ToString()) + ")";
            else if (GlobalVariables.Instance.dbConnection == Common.Helpers.Enums.DatabaseConnection.MasterApp2)
                insetValues = "(" + Id.ToString() + " , '" + Naziv + "', " + (VremeKreiranja == null ? "NULL" : "'" + Convert.ToDateTime(VremeKreiranja) + "'") + " , " + (Rezident == null ? "NULL" : (bool)Rezident == true ? "1" : "0") + " , '" + IdentifikacioniBroj + "' , '" + Jezik + "', '" + Ime + "','" + Prezime + "', " + (DatumRodjenja == null ? "NULL" : "'" + Convert.ToDateTime(DatumRodjenja) + "'") + "," + (Pol == null ? "NULL" : "'" + Pol + "'") + "," + (OtacId == 0 ? "NULL" : OtacId.ToString()) + "," + (MajkaId == 0 ? "NULL" : MajkaId.ToString()) + ", @Slika," + IdentifikacioniDokumentId + ")";

            return insetValues;
        }

        public new string SchemaName()
        {
            return "dbo";
        }

        public new string Alias()
        {
            return "fl";
        }

    }
}
